<?php
/*
 *Classe DBTransaction
 *representa uma transação
 *transação é uma operação que tem um início e um fim, formada por um conjunto de instruções SQL
 *caso ocorra erro com alguma instrução, todas as instruções serão desfeitas e a transação não será finalizada
*/
final class DBTransaction {
	static $conn; //representa a conexão com o gerenciador da base de dados
	
	//o método construtor é privado para impedir que um objeto seja instânciado 
	private function __construct() {}	
	
	/*
	 *método open()
	 *verifica se existe um objeto PDO, uma conexão com o gerenciador de base de dados
	 *caso não exista, cria um objeto PDO e inicia uma transação através do método beignTransaction()
	 *@param $connection_file = nome do arquivo de configuração da base de dados
	*/  
	static function open($connection_file) {
		if(!self::$conn) {
			self::$conn = DBConnection::open($connection_file);
			//inicia uma operação de transação
			self::$conn->beginTransaction();
		}
	}
	
	/*
	 *método getTransaction()
	 *retorna o objeto PDO com a operação de transação inicializada
	*/
	static function getTransaction() {
		return self::$conn;
	}
	
	/*
	 *método unmake()
	 *desfaz as operações caso alguma apresentea algum erro
	*/
	static function unmake() {
		if(self::$conn) {
			self::$conn->rollback();
			self::$conn = NULL;	
		}
	}
	
	/*
	 *método close()
	 *executa a operação de transação e depois destroi o objeto PDO atribuindo NULL a conexão
	*/ 
	static function close() {
		if(self::$conn) {
			self::$conn->commit();
			self::$conn = NULL;	
		}
	}
}
?>
